package com.woniu.project.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu.project.client.ProductPropertyClient;
import com.woniu.project.core.domain.ProductEntity;
import com.woniu.project.core.dto.ResultDto;
import com.woniu.project.dao.ProductEntityMapper;
import com.woniu.project.dto.imagedto.ImageDto;
import com.woniu.project.dto.productentitydto.ProductEntityDto;
import com.woniu.project.dto.productentitydto.ProductEntityListDto;
import com.woniu.project.dto.productentitydto.ProductEntityOneDto;
import com.woniu.project.dto.productproperty.ProdcutPropertySelectDto;
import com.woniu.project.params.productentityparams.ImageParams;
import com.woniu.project.params.productentityparams.ProductEntityConditionParams;
import com.woniu.project.params.productentityparams.ProductEntityParams;
import com.woniu.project.params.productentityparams.ProductPropertyParams;
import com.woniu.project.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author WHF
 * @since 2020-10-13
 */
@Service
public class ProductEntityServiceImpl extends ServiceImpl<ProductEntityMapper, ProductEntity> implements IProductEntityService {

    @Autowired
    private ProductEntityMapper productEntityMapper;
    @Autowired
    private IImageService imageService;
    @Autowired
    private IProductEntityPropertyCentreService productEntityPropertyCentreService;
    @Autowired
    private IProductEntityAssessService productEntityAssessService;
    @Autowired
    private IProductEntityIdentifyService productEntityIdentifyService;
    @Autowired
    private ProductPropertyClient productPropertyClient;

    @Override
    public IPage<ProductEntityListDto> selectProductEntityList(ProductEntityConditionParams productEntityConditionParams) {
        Page<ProductEntityListDto> page=new Page<>(productEntityConditionParams.getPageIndex(),productEntityConditionParams.getPageNumber());
        IPage<ProductEntityListDto> productEntityListDtoIPage=productEntityMapper.selectProductEntityList(page,
                productEntityConditionParams.getProductEntityStatus(),
                productEntityConditionParams.getOperator(),productEntityConditionParams.getProductParams(),
                productEntityConditionParams.getStartTime(),productEntityConditionParams.getEndTime());
        return productEntityListDtoIPage;


    }

    @Override
    public List<ProductEntityDto> selectByBigTypeId(Integer bigTypeId) {
        List<ProductEntityDto> productEntityDtos=productEntityMapper.selectByBigTypeId(bigTypeId);
        return productEntityDtos;
    }

    @Override
    public List<ProductEntityDto> selectBySmallTypeId(Integer smallTypeId) {
        List<ProductEntityDto> productEntityDtos=productEntityMapper.selectBySmallTypeId(smallTypeId);
        return productEntityDtos;
    }

    @Override
    public List<ProductEntityDto> selectByProductId(Integer productId) {
        QueryWrapper<ProductEntity> wrapper=new QueryWrapper<>();
        wrapper.eq("product_id",productId);
        List<ProductEntity> productEntities = productEntityMapper.selectList(wrapper);
        List<ProductEntityDto> productEntityDtos=new ArrayList<>();
       for(int i=0;i<productEntities.size();i++){
           ProductEntityDto productEntityDto=new ProductEntityDto();
           BeanUtils.copyProperties(productEntities.get(i),productEntityDto);
           productEntityDtos.add(productEntityDto);
       }
        return productEntityDtos;
    }

    @Override
    public List<ProductEntityDto> selectByBrandId(Integer brandId) {
        List<ProductEntityDto> productEntityDtos=productEntityMapper.selectByBrandId(brandId);
        return productEntityDtos;
    }

    @Override
    public List<ProductEntityDto> selectByPropertyId(Integer propertyId) {
        List<ProductEntityDto> productEntityDtos=productEntityMapper.selectByPropertyId(propertyId);

        return productEntityDtos;
    }

    @Override
    public ProductEntityOneDto selectOneProductEntity(Integer productEntityId) {
        ProductEntityOneDto productEntityOneDto=productEntityMapper.selectOneProductEntity(productEntityId);
        ResultDto resultDto = productPropertyClient.selectByEntityId(productEntityId);
        List<ProdcutPropertySelectDto> prodcutPropertySelectDto =(List<ProdcutPropertySelectDto>) resultDto.getData();
        productEntityOneDto.setProductProperty(prodcutPropertySelectDto);
        List<ImageDto> imageDtos = imageService.selectImageByProductEntityId(productEntityId);
        productEntityOneDto.setImages(imageDtos);
        return productEntityOneDto;
    }

    @Override
    @Transactional
    public void updateProductEntity(ProductEntityParams productEntityParams) {
        ProductEntity productEntity=new ProductEntity();
        BeanUtils.copyProperties(productEntityParams,productEntity);
        productEntity.setProductEntityStatus("未鉴定");
        productEntity.setProductEntityEnterTime(new Date());
        System.out.println("---------------------->>>>>>>>>"+productEntity);
        saveOrUpdate(productEntity);
        if(productEntityParams.getProductEntityId()!=null){
            productEntityPropertyCentreService.deleteByProductEntityId(productEntityParams.getProductEntityId());
        }
        List<ProductPropertyParams> productPropertyParams = productEntityParams.getProductPropertyParams();
        for(ProductPropertyParams PropertyParam:productPropertyParams){

            for(Integer ProductPropertyId:PropertyParam.getProductPropertyValueId()){
                productEntityPropertyCentreService.insertPropertyCentre(productEntity.getProductEntityId(),
                        PropertyParam.getProductPropertyId(),ProductPropertyId);
            }
        }

        for(ImageParams imageParams:productEntityParams.getImages()){
            System.out.println(productEntity.getProductEntityId()+"    "+imageParams.getImageaddr()+"----->>>"+imageParams.getImageComment());
            imageService.insertImage(productEntity.getProductEntityId(),imageParams.getImageaddr(),imageParams.getImageComment());

        }

    }

    @Override
    @Transactional
    public void deleteProductEntity(Integer productEntityId) {
        productEntityMapper.deleteById(productEntityId);
        productEntityPropertyCentreService.deleteByProductEntityId(productEntityId);
        productEntityAssessService.deleteAssess(productEntityId);
        productEntityIdentifyService.deleteIdentity(productEntityId);
        imageService.deleteImages(productEntityId);
    }

    @Override
    public void updateAssess(Integer productEntityId, Integer assessManId) {
        ProductEntity productEntity=new ProductEntity();
        productEntity.setProductEntityId(productEntityId);
        productEntity.setAssessManId(assessManId);
        productEntity.setProductEntityStatus("已评估");
        productEntityMapper.updateById(productEntity);

    }

    @Override
    public void updateIdentity(Integer productEntityId, Integer identifyManId) {
        ProductEntity productEntity=new ProductEntity();
        productEntity.setProductEntityId(productEntityId);
        productEntity.setIdentifyManId(identifyManId);
        productEntity.setProductEntityStatus("已鉴定");
        productEntityMapper.updateById(productEntity);
    }
}
